package com.cqh.recruit.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.cqh.recruit.pojo.dto.ActivityQueryDto;
import com.cqh.recruit.pojo.dto.StudentActivityQueryDTO;
import com.cqh.recruit.pojo.entity.Activity;
import com.cqh.recruit.pojo.vo.ActivityListVo;
import com.cqh.recruit.pojo.vo.StudentActivityListVO;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Update;


/**
 * <p>
 * 活动信息表 Mapper 接口
 * </p>
 *
 * @author dh
 * @since 2025-10-18
 */
public interface ActivityMapper extends BaseMapper<Activity> {

    Page<ActivityListVo> findActivityByQueryDto(Page  page, @Param("activity") ActivityQueryDto activityQueryDto);

    ActivityListVo findActivityById(Long id);

    /**
     * 根据查询条件分页查询活动列表
     * @param queryDto
     * @return
     */
    Page<StudentActivityListVO> queryActivityList(Page<StudentActivityListVO> page, @Param("queryDto") StudentActivityQueryDTO queryDto);

    /**
     * 查询登陆学生已报名的活动列表
     * @param queryDto
     * @return
     */
    Page<StudentActivityListVO> queryEnrolledActivityList(Page<StudentActivityListVO> page, StudentActivityQueryDTO queryDto, @Param("studentId") Long studentId);
    
    /**
     * 原子性增加参与人数（防止并发问题）
     * @param id 活动ID
     * @return 更新的行数
     */
    @Update("UPDATE activity SET current_participants = current_participants + 1 " +
            "WHERE id = #{id} AND current_participants < capacity AND is_deleted = 0")
    int incrementParticipants(@Param("id") Long id);
    
    /**
     * 原子性减少参与人数（用于审核不通过或取消的情况）
     * @param id 活动ID
     * @return 更新的行数
     */
    @Update("UPDATE activity SET current_participants = current_participants - 1 " +
            "WHERE id = #{id} AND current_participants > 0 AND is_deleted = 0")
    int decrementParticipants(@Param("id") Long id);
}
